/*
  Copyright (C) 2011, Kyungjoo Kim
  
  This file is part of UHM (Unassembled HyperMatrix) sparse direct solver.
  
  All rights reserved.

  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.
  
  This library is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  Lesser General Public License for more details.
  
  You should have received a copy of the GNU Lesser General Public
  License along with this library; if not, write to the Free Software
  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  Also add information on how to contact you by electronic and paper mail.
  
  
  Kyungjoo Kim
  iamkyungjoo@gmail.com
*/
#ifndef UHM_UTIL_ERROR_HXX
#define UHM_UTIL_ERROR_HXX


namespace uhm {

  /*! Error handler
   */

  inline void error(const Int_ eval,
                    const Char_ *file, const Int_ line,
                    const Char_ *prefix,
                    const Char_ *format,
                    ...) {

    if (!eval) {
      Char_ buffer[1024];
      va_list args;
      va_start( args, format );
      vsprintf( buffer, format, args );
      fprintf(stderr, "%s %s, %d\n", prefix, file, line);
      throw std::logic_error( buffer );
    }
  }
  
#define UHM_ERROR(eval, msg)						\
  uhm::error((eval),__FILE__,__LINE__,"[UHM ERROR] ", "%s\n", msg);
  
#define UHM_ERROR_DETAIL(eval,format,...)				\
  uhm::error((eval), __FILE__,__LINE__,"[UHM ERROR] ", format, __VA_ARGS__);
}


#endif
